ποΈGitΠ―ΡΠ°ποΈ
.github/workflows/scheduled-baseline.yml 492afbde5c98f3efdcd367ab2f13ef3665fe7388 (492afbde) Text, 6.15 KB
Tff7b72nameTb4b4b4: Ta5d6ffScheduledTa5d6ff Ta5d6ffBaselineTa5d6ff Ta5d6ffProfileTa5d6ff Ta5d6ff&Ta5d6ff Ta5d6ffGraphs
Tff7b72onTb4b4b4:
Tff7b72scheduleTb4b4b4:
T8b949e# Once a day. Baseline-profile regeneration needs a booted emulator (~14 min)
T8b949e# and the profile/graphs rarely change, so this is decoupled from the frequent
T8b949e# firmware/hardware/translation job in scheduled-updates.yml.
Tb4b4b4- Tff7b72cronTb4b4b4: Ta5d6ff'Ta5d6ff0Te6edf3 Ta5d6ff0Te6edf3 Ta5d6ff*Te6edf3 Ta5d6ff*Te6edf3 Ta5d6ff*Ta5d6ff'
Tff7b72workflow_dispatchTb4b4b4: T8b949e# Allow manual triggering
T8b949e# Emulator runs take up to ~1 h; a manual dispatch overlapping the daily cron
T8b949e# would race on the scheduled-baseline branch. Later runs queue, never stack.
Tff7b72concurrencyTb4b4b4:
Tff7b72groupTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffgithub.workflowTa5d6ff Ta5d6ff}}
Tff7b72cancel-in-progressTb4b4b4: Ta5d6fffalse
Tff7b72jobsTb4b4b4:
Tff7b72regenerateTb4b4b4:
Tff7b72runs-onTb4b4b4: Ta5d6ffubuntu-24.04
Tff7b72timeout-minutesTb4b4b4: Ta5d6ff90
Tff7b72ifTb4b4b4: Ta5d6ffgithub.repositoryTa5d6ff Ta5d6ff==Ta5d6ff Ta5d6ff'meshtastic/Meshtastic-Android'
Tff7b72permissionsTb4b4b4:
Tff7b72contentsTb4b4b4: Ta5d6ffwrite T8b949e# To commit files and push branches
Tff7b72pull-requestsTb4b4b4: Ta5d6ffwrite T8b949e# To create pull requests
Tff7b72stepsTb4b4b4:
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCheckoutTa5d6ff Ta5d6ffrepository
Tff7b72usesTb4b4b4: Ta5d6ffactions/checkout@v7.0.1
Tff7b72withTb4b4b4:
Tff7b72tokenTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.CROWDIN_GITHUB_TOKENTa5d6ff Ta5d6ff}}
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffGradleTa5d6ff Ta5d6ffSetup
Tff7b72usesTb4b4b4: Ta5d6ff./.github/actions/gradle-setup
Tff7b72withTb4b4b4:
Tff7b72gradle_encryption_keyTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.GRADLE_ENCRYPTION_KEYTa5d6ff Ta5d6ff}}
Tff7b72develocity_access_keyTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.DEVELOCITY_ACCESS_KEYTa5d6ff Ta5d6ff}}
Tff7b72cache_read_onlyTb4b4b4: Ta5d6ff'Ta5d6fffalseTa5d6ff'
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffUpdateTa5d6ff Ta5d6ffGraphs
Tff7b72runTb4b4b4: Ta5d6ff./gradlewTa5d6ff Ta5d6ffgraphUpdate
Tff7b72continue-on-errorTb4b4b4: Ta5d6fftrue
T8b949e# ββ Baseline Profile regeneration βββββββββββββββββββββββββββββββββββ
T8b949e# Generation needs a booted emulator; continue-on-error keeps flakiness
T8b949e# from blocking the graphs PR.
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffEnableTa5d6ff Ta5d6ffKVMTa5d6ff Ta5d6ff(forTa5d6ff Ta5d6fftheTa5d6ff Ta5d6ffemulator)
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' \
Tff7b72| sudo tee /etc/udev/rules.d/99-kvm4all.rules
Tff7b72sudo udevadm control --reload-rules
Tff7b72sudo udevadm trigger --name-match=kvm
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffGenerateTa5d6ff Ta5d6ffBaselineTa5d6ff Ta5d6ffProfile
Tff7b72idTb4b4b4: Ta5d6ffgenerate_baseline
Tff7b72continue-on-errorTb4b4b4: Ta5d6fftrue T8b949e# Emulator flakiness must not block the graphs PR.
Tff7b72usesTb4b4b4: Ta5d6ffreactivecircus/android-emulator-runner@v2
Tff7b72withTb4b4b4:
Tff7b72api-levelTb4b4b4: Ta5d6ff34
Tff7b72targetTb4b4b4: Ta5d6ffgoogle_apis T8b949e# google flavor needs GMS (Maps) on the device image
Tff7b72archTb4b4b4: Ta5d6ffx86_64
Tff7b72profileTb4b4b4: Ta5d6ffpixel_6
Tff7b72disable-animationsTb4b4b4: Ta5d6fftrue
Tff7b72emulator-optionsTb4b4b4: Ta5d6ff-no-windowTa5d6ff Ta5d6ff-gpuTa5d6ff Ta5d6ffswiftshader_indirectTa5d6ff Ta5d6ff-noaudioTa5d6ff Ta5d6ff-no-boot-animTa5d6ff Ta5d6ff-camera-backTa5d6ff Ta5d6ffnone
T8b949e# Writes androidApp/src/google/generated/baselineProfiles/ via the androidx.baselineprofile plugin.
T8b949e# --no-configuration-cache: the underlying connectedGoogleNonMinifiedReleaseAndroidTest task is not
T8b949e# config-cache serializable (SeparateTestModuleTestData / ResolutionBackedFileCollection), and the
T8b949e# project enables org.gradle.configuration-cache by default β same workaround used in reusable-check.yml.
T8b949e# -Dorg.gradle.isolated-projects=false must accompany it: Isolated Projects implies the configuration cache, and
T8b949e# Gradle 9.7+ hard-errors when the cache is disabled while Isolated Projects is on.
Tff7b72scriptTb4b4b4: Ta5d6ff./gradlewTa5d6ff Ta5d6ff:androidApp:generateGoogleReleaseBaselineProfileTa5d6ff Ta5d6ff-Pci=trueTa5d6ff Ta5d6ff-Dorg.gradle.isolated-projects=falseTa5d6ff Ta5d6ff--no-configuration-cache
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffDetectTa5d6ff Ta5d6ffbaselineTa5d6ff Ta5d6ffprofileTa5d6ff Ta5d6ffchanges
Tff7b72idTb4b4b4: Ta5d6ffbaseline
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72profile_dir="androidApp/src/google/generated/baselineProfiles"
Tff7b72outcome="${{ steps.generate_baseline.outcome }}"
Tff7b72if [ "$outcome" != "success" ]; then
Tff7b72echo "::warning::Baseline profile generation failed (outcome: $outcome). Skipping."
Tff7b72echo "status=error" >> "$GITHUB_OUTPUT"
Tff7b72elif [ -n "$(git status --porcelain "$profile_dir" 2>/dev/null)" ]; then
Tff7b72echo "status=updated" >> "$GITHUB_OUTPUT"
Tff7b72else
Tff7b72echo "status=unchanged" >> "$GITHUB_OUTPUT"
Tff7b72fi
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffBuildTa5d6ff Ta5d6ffPRTa5d6ff Ta5d6ffbody
Tff7b72idTb4b4b4: Ta5d6ffpr_body
Tff7b72runTb4b4b4: Tb4b4b4|
Tff7b72baseline_status="${{ steps.baseline.outputs.status }}"
Tff7b72body="This PR includes automated updates from the scheduled workflow:"
Tff7b72body+=$'\n'
Tff7b72case "$baseline_status" in
Tff7b72updated) body+=$'\n'"- β
\`androidApp\` baseline profile regenerated on an emulator." ;;
Tff7b72unchanged) body+=$'\n'"- βοΈ \`androidApp\` baseline profile regenerated β no changes detected." ;;
Tff7b72error) body+=$'\n'"- β οΈ \`androidApp\` baseline profile generation failed β skipped (see workflow logs)." ;;
Tff7b72*) body+=$'\n'"- β \`androidApp\` baseline profile β unknown status." ;;
Tff7b72esac
Tff7b72body+=$'\n'"- Updated module dependency graphs in README.md files (if changed)."
Tff7b72body+=$'\n'
Tff7b72body+=$'\n'"Please review the changes."
Tff7b72{
Tff7b72echo "content<<PREOF"
Tff7b72echo "$body"
Tff7b72echo "PREOF"
Tff7b72} >> "$GITHUB_OUTPUT"
Tb4b4b4- Tff7b72nameTb4b4b4: Ta5d6ffCreateTa5d6ff Ta5d6ffPullTa5d6ff Ta5d6ffRequestTa5d6ff Ta5d6ffifTa5d6ff Ta5d6ffchangesTa5d6ff Ta5d6ffoccurred
Tff7b72usesTb4b4b4: Ta5d6ffpeter-evans/create-pull-request@v8
Tff7b72withTb4b4b4:
Tff7b72tokenTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsecrets.CROWDIN_GITHUB_TOKENTa5d6ff Ta5d6ff}}
Tff7b72commit-messageTb4b4b4: Tb4b4b4|
Tff7b72chore: Scheduled updates (Graphs, Baseline Profile)
Tff7b72Automated updates for:
Tff7b72- Module dependency graphs
Tff7b72- androidApp baseline profile
Tff7b72titleTb4b4b4: Ta5d6ff'Ta5d6ffchore:Te6edf3 Ta5d6ffScheduledTe6edf3 Ta5d6ffupdatesTe6edf3 Ta5d6ff(Graphs,Te6edf3 Ta5d6ffBaselineTe6edf3 Ta5d6ffProfile)Ta5d6ff'
Tff7b72bodyTb4b4b4: Ta5d6ff${{Ta5d6ff Ta5d6ffsteps.pr_body.outputs.contentTa5d6ff Ta5d6ff}}
Tff7b72branchTb4b4b4: Ta5d6ff'Ta5d6ffscheduled-baselineTa5d6ff'
Tff7b72baseTb4b4b4: Ta5d6ff'Ta5d6ffmainTa5d6ff'
Tff7b72delete-branchTb4b4b4: Ta5d6fftrue
T8b949e# Only stage the baseline-profile dir when generation actually produced changes. When the emulator
T8b949e# boots far enough for Gradle to create an *empty* baselineProfiles/ dir but generation then fails,
T8b949e# `git add <glob>` aborts with "pathspec did not match any files", which would hard-fail this step
T8b949e# and defeat the continue-on-error on the generation step above.
Tff7b72add-pathsTb4b4b4: Tb4b4b4|
Tff7b72${{ steps.baseline.outputs.status == 'updated' && 'androidApp/src/google/generated/baselineProfiles/**' || '' }}
Tff7b72**/README.md
Tff7b72labelsTb4b4b4: Tb4b4b4|
Tff7b72automation
Served by rngit 1.5.2 - Generated in 0.15s